import Taro from '@tarojs/taro'
import Fly from 'flyio/dist/npm/wx'

const $http = new Fly

// 配置Fly实例
// 设置请求基础地址
// $http.config.baseURL = ''

// 合并请求参数处理函数
const paramsMerge = (args) => {
  // 可以在这里设置公共参数什么的
  if (args.length < 1) throw Error('url not find')
  args[1] = {
    ...(args[1] || {}),
  }
}

// 设置拦截器
/**
 * post,get方法装饰
 */
  // 劫持fly库post,get方法
const nativePost = $http.post
const nativeGet = $http.get

// 装饰post
$http.post = async (...args) => {
  // 合并请求参数
  paramsMerge(args)
  return await nativePost.call($http, ...args)
}
// 装饰get
$http.get = async (...args) => {
  // 合并请求参数
  paramsMerge(args)
  return await nativeGet.call($http, ...args)
}

// $http.lock() // 请求挂起
// $http.unlock() // 解锁请求
// $http.clear() // 清除请求队列

// 请求发起时拦截
$http.interceptors.request.use((request) => {
  // 请求前验证balabala....
  // 如果要在此处做异步校验操作的话，需要返回一个Promise的对象,比如再次new一个fly实例发出请求并返回
  return request // 返回request对象继续请求
})

// 请求完成时拦截
$http.interceptors.response.use((response) => {
  // 返回验证balabala....
  return response.data
  // eslint-disable-next-line handle-callback-err
}, ({status}) => {
  // 请求失败
  switch (status) {
    case 0:
      Taro.showToast({title: '网络错误，请检查网络', icon: 'none', mask: true})
      break;
    case 1:
      Taro.showToast({title: '请求超时啦', icon: 'none', mask: true})
      break;
  }
})

// 图片上传
export async function uploadFile(filePath) {
  const result = await Taro.uploadFile({
    url: 'https://project.weitip.com/index/project/upload',
    filePath,
    name: 'file'
  })
  if (result) {
    const {code, data} = JSON.parse(result.data)
    if (code === 1) {
      return {
        url: `https://project.weitip.com${data.url}`,
        originalUrl: data.url
      }
    }
  }
  Taro.showToast({title: '文件上传失败', icon: 'none'})
  return null
}

// 导出
export default $http
